<?php
/**
 * 自动压缩图片生成小图
 * User: dxk
 * Date: 2020/07/17
 */
namespace App\Library\Service;

use Image;

class ThumbPic
{
    /**
     * 压缩图片
     *
     * @param string $dst_file 目标图片路径
     * @return bool
     */
    public function makeAutoThump($dst_file)
    {
        ini_set('memory_limit', '500M');
        if (empty($dst_file)) {
            return false;
        }
        if (@is_file($dst_file)) {
            return $dst_file;
        }
        //获取缩略图规格
//        $dst_file = strtolower($dst_file);
        $dst_file_info = pathinfo($dst_file);
        $file_name = $dst_file_info['filename'];
        $extension = strtolower($dst_file_info['extension']);
        $file_name_arr = explode('_', $file_name);
        $size_str = array_pop($file_name_arr);
        if (empty($size_str)) {
            return false;
        }
        if ($extension != 'jpg') {
            return false;
        }
        $src_file = substr($dst_file, 0, strpos($dst_file, $size_str) - 1);
        if (empty($src_file) || !@is_file($src_file)) {
            return false;
        }
        //判断图片规格是否允许
        $pic_size = config('sys.pic_size');
        if (!in_array($size_str, $pic_size)) {
            return false;
        }
        $size_arr = explode('x', $size_str);
        if (!is_array($size_arr) || !in_array(count($size_arr), array(2, 3))) {
            return false;
        }
        $width = (int)$size_arr[0];
        $height = (int)$size_arr[1];
        if ($width <= 0 || $height <= 0) {
            return false;
        }
        $is_force_wh = false; // 是否强制截取宽高
        if (isset($size_arr[2]) && $size_arr[2] == 'z') {
            $is_force_wh = true;
        }
        if ($is_force_wh == true) {
            Image::make($src_file)->fit($width, $height)->save($dst_file);
        } else {
            Image::make($src_file)->resize($width, $height, function ($constraint) {
                $constraint->aspectRatio();
                $constraint->upsize();
            })->save($dst_file);
        }
        return $dst_file;
    }

    /**
     * 生成云存储合适大小的图片
     * @param $src_file
     * @return mixed
     */
    public function makeYunThump($src_file)
    {
        ini_set('memory_limit', '500M');
        if (empty($src_file) || @!is_file($src_file)) {
            return $src_file;
        }
        $size = filesize($src_file);
        if ($size < 1024 * 100) {
            return $src_file;
        }
        $quality = 90;
        if ($size > 1024 * 150) {
            //大于100kb则压缩
            $quality = 80;
        }
        //获取缩略图规格
        Image::make($src_file)->resize(1500, 30000, function ($constraint) {
            $constraint->aspectRatio();
            $constraint->upsize();
        })->save($src_file, $quality);
        return $src_file;
    }
}
